#include<stdio.h>
#include<windows.h>
#include<conio.h>

int getLetters (const char *);
void pixelLetter (int, int, int);
void printLetter (int, int, int);

char Alphabet[]= "'$,.;@[]^_`{}abcefghijklmnopqrstuvwxyzd";
char **Letter[sizeof(Alphabet)];
int H, W;

HDC DC;
int pointer;

int main()
{
    int a, q;

    DC = GetDC(GetDesktopWindow());
    getLetters("");

    while((a=getch()) != 10 && a != 13)
    {
        if (a == '/')
            a = '_';
		else if (a == 'N')
			a = '@';
		else if (a == 'H')
			a = '^';
		else if (a == 'B')
			a = '{';
		else if (a == 'T')
			a = '}';
		else if (a == 'Y')
			a = '$';

        for (q=0; q<sizeof(Alphabet); q++)
            if(a == Alphabet[q])
                printLetter(q, H, W), pixelLetter(q, H, W);
    }
}

int getLetters(const char *Path)
{
    int start, hight, width;
    int i, j , q, l;
    int A;
    char twoPowers[]={128, 64, 32, 16, 8, 4, 2, 1};
    char path[100];
    FILE *bmp;
    
	for(A = 0; Alphabet[A]; A++)
    {
        sprintf(path, "%s%c.bmp", Path, Alphabet[A]);
        bmp = fopen(path, "r");
        if (!bmp)
            return -1;

        fseek(bmp, 10, SEEK_SET); fread((void *)&start, sizeof(int), 1, bmp);
        fseek(bmp, 18, SEEK_SET); fread((void *)&width, sizeof(int), 1, bmp);
        fseek(bmp, 22, SEEK_SET); fread((void *)&hight, sizeof(int), 1, bmp);

        H = hight, W = width;
        fseek(bmp,start,SEEK_SET);
        Letter[A] = (char**)malloc(hight*sizeof(char*));

        for (i = hight-1; i >= 0; i--, fread((void *)&l, 1, 3-(width%32-1)/8, bmp))
        {
            for (Letter[A][i] = (char*)malloc(width), j=0; j< width;)
            {
                for (q = fgetc(bmp), l=0; l < 8 && j < width; l++, j++)
                    Letter[A][i][j] = q & twoPowers[l] ? 0 : 1;
            }
        }

        fclose(bmp);
        printLetter(A, hight, width);

    }

    return 0;
}

void pixelLetter (int A, int hight, int width)
{
    int i, j;

    for(i = 0 ; i < hight; i++)
        for(j = 0; j < width; j++)
            SetPixel(DC, 1000 + i - pointer * width, 100 + j, Letter[A][j][i] * 0xFFFFFF);

    pointer++;
}

void printLetter(int A, int hight, int width)
{
    int i, j;
    for(i = 0; i < hight; i++, putchar(10))
            for(j = 0 ; j < width; j++)
                putchar(Letter[A][i][j]);
}